package com.ideaaedi.zoo.diy.feature.reqresp.encdec.api.properties.nested;

import com.ideaaedi.zoo.commonbase.constant.AutoConfigurationConstant;
import jakarta.validation.Valid;
import lombok.Data;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * 响应加密
 */
@Data
public class RespEncryptProperties {
    /**
     * 是否开启响应加密
     */
    private boolean enable = false;
    
    /**
     * 设置相关加密实现的spring-bean优先级（如果实现支持order的话）
     */
    private int order = AutoConfigurationConstant.ZOO_RESP_ENCRYPT_FILTER_ORDER;
    
    /**
     * 加密使用的aes-key
     */
    private String aesKey = "0000000000000000";
    
    /**
     * 加密使用的向量
     */
    private String aesIv;
    
    /**
     * 要加密的host
     * <p>
     * 支持ant匹配
     * </p>
     */
    private Set<String> includeHosts = new HashSet<>();
    
    /**
     * 不加密的host
     * <p>
     * 支持ant匹配
     * </p>
     */
    private Set<String> excludeHosts = new HashSet<>();
    
    /**
     * 要加密的path
     * <p>
     * 支持ant匹配
     * </p>
     */
    private Set<String> includePaths = new HashSet<>();
    
    /**
     * 不加密的path
     * <p>
     * 支持ant匹配
     * </p>
     */
    private Set<String> excludePaths = new HashSet<>();
    
    /**
     * 当存在指定的响应头时，加密
     */
    @Valid
    private Set<HeaderKeyValues> includeExistRespHeaders = new HashSet<>();
    
    /**
     * 当存在指定的响应头时，不加密
     */
    @Valid
    private Set<HeaderKeyValues> excludeExistRespHeaders = new HashSet<>();
    
    /**
     * 更多自定义配置
     */
    private Map<String, Object> properties = new HashMap<>(16);
}
